<?php
namespace app\index\controller;

/**
 * 引入必要的类和模型
 */
use think\Controller;
use app\index\model\Message as MessageModel;
use app\index\model\Like as LikeModel;
use think\Session;

/**
 * 留言控制器类
 * 负责处理留言的发布、删除和点赞等操作
 */
class Message extends Controller
{
    /**
     * 留言模型实例
     * @var MessageModel
     */
    protected $message;
    
    /**
     * 点赞模型实例
     * @var LikeModel
     */
    protected $like;

    /**
     * 构造函数
     * 初始化控制器并实例化相关模型
     */
    public function __construct()
    {
        parent::__construct();
        $this->message = new MessageModel();
        $this->like = new LikeModel();
    }

    /**
     * 发布留言方法
     * 处理用户发布新留言的请求
     * 
     * @return mixed 操作结果的跳转页面
     */
    public function publish()
    {
        // 检查用户是否已登录
        if (!Session::has('user_id')) {
            $this->error('请先登录', 'user/login');
        }

        // 检查是否为POST请求
        if (!request()->isPost()) {
            $this->error('非法请求');
        }

        // 获取表单提交的数据
        $data = input('post.');
        
        // 使用验证器验证提交的数据
        $validate = validate('Message');
        if (!$validate->scene('create')->check($data)) {
            $this->error($validate->getError());
        }

        // 设置当前登录用户ID
        $data['user_id'] = Session::get('user_id');

        // 调用模型方法发布留言
        $result = $this->message->publish($data);
        if ($result['status']) {
            $this->success('发布成功', 'index/index');
        } else {
            $this->error($result['msg']);
        }
    }

    /**
     * 删除留言方法
     * 处理用户删除自己发布的留言
     * 
     * @param int $id 要删除的留言ID
     * @return mixed 操作结果的跳转页面
     */
    public function delete($id)
    {
        // 检查用户是否已登录
        if (!Session::has('user_id')) {
            $this->error('请先登录', 'user/login');
        }

        // 检查ID参数是否存在
        if (!$id) {
            $this->error('参数错误');
        }

        // 调用模型方法删除留言（软删除）
        $result = $this->message->remove($id, Session::get('user_id'));
        if ($result['status']) {
            $this->success('删除成功');
        } else {
            $this->error($result['msg']);
        }
    }

    /**
     * 点赞/取消点赞方法
     * 处理用户对留言的点赞或取消点赞操作
     * 
     * @param int $id 留言ID
     * @return \think\response\Json 返回JSON格式的操作结果
     */
    public function like($id)
    {
        // 检查用户是否已登录
        if (!Session::has('user_id')) {
            $this->error('请先登录', 'user/login');
        }

        // 检查ID参数是否存在
        if (!$id) {
            $this->error('参数错误');
        }

        // 获取当前登录用户ID
        $userId = Session::get('user_id');

        // 检查用户是否已对该留言点赞
        if ($this->like->hasLiked($id, $userId)) {
            // 已点赞，执行取消点赞操作
            $result = $this->like->cancelLike($id, $userId);
        } else {
            // 未点赞，执行点赞操作
            $result = $this->like->doLike($id, $userId);
        }

        // 返回JSON格式的操作结果
        if ($result['status']) {
            // 获取最新的点赞数量
            $count = $this->like->getLikeCount($id);
            return json(['status' => 1, 'msg' => $result['msg'], 'count' => $count]);
        } else {
            return json(['status' => 0, 'msg' => $result['msg']]);
        }
    }
} 